#ifndef __PUB_LOG_H__
#define __PUB_LOG_H__

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <errno.h>
#include <unistd.h>
#include <stdarg.h>
#include <memory.h>

#define LOGNAME_DEFAULT "utrc"
#define LOGPATH_DEFAULT getenv("SWWORK")
#define LOGLEVELCONF_DEFAULT getenv("SLOG_LEVEL")

#define SW_LOG_WARNING          1        /*key information   */
#define SW_LOG_INFO             2        /*Detailed information */
#define SW_LOG_ERROR            3        /*error conditions */
#define SW_LOG_DEBUG            4
#define SW_LOG_ALL              8        /*all information include DEBUG */

#define LOG_MAX_MSG_LEN	2048
#define DTIME_LEN	18
#define FILE_NAME_MAX_LEN	1024

typedef struct
{
    FILE	*fd;							/* 日志文件描述符 */
    char 	logname[FILE_NAME_MAX_LEN];		/* 日志名 */
    char 	logpath[FILE_NAME_MAX_LEN];		/* 日志路径 */
    struct 	tm *ctime;						/* 日志文件创建的日期 */
    int 	pid;                      		/* 进程ID */
    int loglevel;
} log_t;

static log_t grlog;  /* 日志对象 */
#define getrlog() (&grlog)

#define FClose(fd) {fclose(fd), fd = NULL;}
/*#define slog_err(format,...)   log_err("File: "__FILE__", Line: %05d: "format" ", __LINE__, ##__VA_ARGS__)*/
/*
#define slog_err(format,...)   log_err("["__FILE__"][%d] "format" ", __LINE__, ##__VA_ARGS__)
#define slog_debug(format,...)   log_debug("["__FILE__"][%d] "format" ", __LINE__, ##__VA_ARGS__)
#define slog_info(format,...)   log_info("["__FILE__"][%d] "format" ", __LINE__, ##__VA_ARGS__)
 */

#define slog_err(format,...)   log_err("[%s][%d] "format" ", __FILE__, __LINE__, ##__VA_ARGS__)
#define slog_debug(format,...)   log_debug("[%s][%d] "format" ", __FILE__, __LINE__, ##__VA_ARGS__)
#define slog_info(format,...)   log_info("[%s][%d] "format" ", __FILE__, __LINE__, ##__VA_ARGS__)

extern int WrLog_init(log_t ulog);
extern int WrLog(int level, char *fmt, ...);
extern void WrLog_release(void);
static int GetTime(char *dtime, int len);
#endif


